約 4,624,481 件
https://w.atwiki.jp/snesspec/pages/53.html
BMI (Branch Result Minus) [マイナス時分岐] ネガティブフラグが立っている時、オペランドで指定した 符号付きバイト分だけジャンプする。 分岐先のアドレスは、-128 ~ 127 の範囲で指定する。 フラグ変化 なし コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル 注 Program Counter Relative BMI near 30 2 2 1,2 1 実際に分岐が起こった時、1 サイクル追加 2 6502 エミュレーションモード (e=1) の時、 1 サイクル追加
https://w.atwiki.jp/snesspec/pages/112.html
STP (Stop the Processor) [プロセッサのストップ] ハードウェアがリセットされるまでプロセッサを止める。 この命令はいくつかのシステムで、プロセッサをスリープ状態にして 電力消費量を削減するために使われている。 いくつかの 65816 プロセッサには RESet B ピンがあり、 それを使うことにより、この命令が使えるようにしている。 コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル Implied STP DB 1 3
https://w.atwiki.jp/snesspec/pages/166.html
埋め込みカートリッジ情報の場所は、 LoROM の場合 オフセット 32704 バイト目~ (0x7FC0) HiROM の場合 オフセット 65472 バイト目~ (0xFFC0) サイズは 64 バイト (0x40)。 オフセット サイズ 情報 0x00 0x15 ゲームタイトル 0x15 0x01 ROM 構造 0x16 0x01 ROM タイプ 0x17 0x01 ROM サイズ 0x18 0x01 SRAM サイズ 0x19 0x01 国 0x1A 0x01 ライセンス 0x1B 0x01 ゲームバージョン 0x1C 0x02 ROM チェックサムの逆数 0x1E 0x02 ROM チェックサム 0x20 0x04 未使用? 0x24 0x02 ネイティブモード COP ベクタ 0x26 0x02 ネイティブモード BRK ベクタ 0x28 0x02 ネイティブモード ABORT ベクタ 0x2A 0x02 ネイティブモード NMI ベクタ 0x2C 0x02 未使用 0x2E 0x02 ネイティブモード IRQ ベクタ 0x30 0x04 未使用? 0x34 0x02 エミュレーションモード COP ベクタ 0x36 0x02 未使用 0x38 0x02 エミュレーションモード ABORT ベクタ 0x3A 0x02 エミュレーションモード NMI ベクタ 0x3C 0x02 エミュレーションモード RESET ベクタ 0x3E 0x02 エミュレーションモード IRQ/BRK ベクタ ゲームタイトル 大文字で 21 文字 ROM 構造 上位 4 ビット ROM スピード値 0 SlowROM (200ns) 3 FastROM (120ns) 下位 4 ビット バンクサイズ 0 LoROM (32kb banks) 1 HiROM (64kb banks) ROM タイプ バイト ROM タイプ 0 ROM のみ 1 ROM と RAM 2 ROM と Save RAM 3 ROM と DSP1 chip 4 ROM と RAM と DSP1 chip 5 ROM と Save RAM と DSP1 chip 19 ROM と Super FX chip 227 ROM と RAM と GameBoy データ 246 ROM と DSP2 chip ROM サイズ バイト ROM サイズ 8 2 MegaBits 9 4 MegaBits 10 8 MegaBits 11 16 MegaBits 12 32 MegaBits SRAM サイズ バイト SRAM サイズ 0 (none) 1 16 KiloBits 2 32 KiloBits 3 64 KiloBits 国 バイト 国 ビデオシステム 0 Japan NTSC 1 USA NTSC 2 Australia, Europe, Oceania and Asia PAL 3 Sweden PAL 4 Finland PAL 5 Denmark PAL 6 France PAL 7 Holland PAL 8 Spain PAL 9 Germany, Austria and Switzerland PAL 10 Italy PAL 11 Hong Kong and China PAL 12 Indonesia PAL 13 Korea PAL ライセンス バイト 会社 1 Nintendo 3 Imagineer-Zoom 5 Zamuse 6 Falcom 8 Capcom 9 HOT-B 10 Jaleco 11 Coconuts 12 Rage Software 14 Technos 15 Mebio Software 18 Gremlin Graphics 19 Electronic Arts 21 COBRA Team 22 Human/Field 23 KOEI 24 Hudson Soft 26 Yanoman 28 Tecmo 30 Open System 31 Virgin Games 32 KSS 33 Sunsoft 34 POW 35 Micro World 38 Enix 39 Loriciel/Electro Brain 40 Kemco 41 Seta Co.,Ltd. 45 Visit Co.,Ltd. 49 Carrozzeria 50 Dynamic 51 Nintendo 52 Magifact 53 Hect 60 Empire Software 61 Loriciel 64 Seika Corp. 65 UBI Soft 70 System 3 71 Spectrum Holobyte 73 Irem 75 Raya Systems/Sculptured Software 76 Renovation Products 77 Malibu Games/Black Pearl 79 U.S. Gold 80 Absolute Entertainment 81 Acclaim 82 Activision 83 American Sammy 84 GameTek 85 Hi Tech Expressions 86 LJN Toys 90 Mindscape 93 Tradewest 95 American Softworks Corp. 96 Titus 97 Virgin Interactive Entertainment 98 Maxis 103 Ocean 105 Electronic Arts 107 Laser Beam 110 Elite 111 Electro Brain 112 Infogrames 113 Interplay 114 LucasArts 115 Parker Brothers 117 STORM 120 THQ Software 121 Accolade Inc. 122 Triffix Entertainment 124 Microprose 127 Kemco 128 Misawa 129 Teichio 130 Namco Ltd. 131 Lozc 132 Koei 134 Tokuma Shoten Intermedia 136 DATAM-Polystar 139 Bullet-Proof Software 140 Vic Tokai 142 Character Soft 143 I Max 144 Takara 145 CHUN Soft 146 Video System Co., Ltd. 147 BEC 149 Varie 151 Kaneco 153 Pack in Video 154 Nichibutsu 155 TECMO 156 Imagineer Co. 160 Telenet 164 Konami 165 K.Amusement Leasing Co. 167 Takara 169 Technos Jap. 170 JVC 172 Toei Animation 173 Toho 175 Namco Ltd. 177 ASCII Co. Activison 178 BanDai America 180 Enix 182 Halken 186 Culture Brain 187 Sunsoft 188 Toshiba EMI 189 Sony Imagesoft 191 Sammy 192 Taito 194 Kemco 195 Square 196 Tokuma Soft 197 Data East 198 Tonkin House 200 KOEI 202 Konami USA 203 NTVIC 205 Meldac 206 Pony Canyon 207 Sotsu Agency/Sunrise 208 Disco/Taito 209 Sofel 210 Quest Corp. 211 Sigma 214 Naxat 216 Capcom Co., Ltd. 217 Banpresto 218 Tomy 219 Acclaim 221 NCS 222 Human Entertainment 223 Altron 224 Jaleco 226 Yutaka 228 T ESoft 229 EPOCH Co.,Ltd. 231 Athena 232 Asmik 233 Natsume 234 King Records 235 Atlus 236 Sony Music Entertainment 238 IGS 241 Motown Software 242 Left Field Entertainment 243 Beam Software 244 Tec Magik 249 Cybersoft 255 Hudson Soft ゲームバージョン 128 より小さい数値を入れる ROM チェックサムの逆数 ROM チェックサムの値を XOR した結果を入れる ROM チェックサム サイズは 16 ビット。 下位 8 ビットを先に入れる。 ROM を 4Mbit の塊に分けて計算する。 計算し終えたら、それぞれの値を加算し、下位 32 ビットを取得する。 4Mbit に分割できない ROM サイズの場合、余りを 2Mbit の塊として分ける。 例えば 10Mbit の場合、4Mbit + 4Mbit + 2Mbit のように分ける。 余りの部分は、4Mbit の塊とするために、2Mbit + 2Mbit (2 x 2Mbit) のように処理する。
https://w.atwiki.jp/snesspec/pages/36.html
COP (Coprocessor Empowerment) [コプロセッサ呼び出し] COP 命令は、ソフトウェア割り込みを発行する。 COP ハードウェアベクタによって分岐する。 割り込みベクタは、$FFF4-$FFF5 に配置されている。 6502 エミュレーションモードの時 プログラムカウンタ (PC) が 2 インクリメントされ、スタックにプッシュされる ステータスレジスタがスタックにプッシュされる 割り込み禁止フラグがセットされる プログラムカウンタ (PC) がハードウェアベクタからロードされる デシマルフラグがクリアされる ネイティブモードの時 プログラムバンクレジスタ (PBR) がスタックにプッシュされる プログラムカウンタ (PC) が 2 インクリメントされ、スタックにプッシュされる ステータスレジスタがスタックにプッシュされる 割り込み禁止フラグがセットされる プログラムバンクレジスタ (PBR) が 0 にクリアされる プログラムカウンタ (PC) がハードウェアベクタからロードされる COP 実行後に、デシマルフラグがクリアされる フラグ変化 ----di-- d デシマルモードフラグは 0 にリセットされる i 割り込み禁止フラグはセットされる コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル 注 Stack/Interrupt COP const 02 2* 7 1 * COP は 1 バイトの命令だが、スタックに詰まれる プログラムカウンタの値は 2 インクリメントされるので、 オプションでシグネチャバイトを入れることができる。 1 65816/65802 ネイティブモード (e=0) の時、1 サイクル追加
https://w.atwiki.jp/snesspec/pages/160.html
IPL (Initial Program Loader) ブート ROM これは SPC700 のブート ROM イメージで、リセット時に実行される。 $CD $EF $BD $E8 $00 $C6 $1D $D0 $FC $8F $AA $F4 $8F $BB $F5 $78 $CC $F4 $D0 $FB $2F $19 $EB $F4 $D0 $FC $7E $F4 $D0 $0B $E4 $F5 $CB $F4 $D7 $00 $FC $D0 $F3 $AB $01 $10 $EF $7E $F4 $10 $EB $BA $F6 $DA $00 $BA $F4 $C4 $F4 $DD $5D $D0 $DB $1F $00 $00 $C0 $FF .ORG $FFC0 MOV X, #$EF ; *** 初期化 *** MOV SP, X ; スタックのセットアップ MOV A, #$00 ; ページ 0 RAM のクリア - MOV (X),A DEC X BNE - MOV $F4,#$AA ; "ready" 信号を 5A22 に送る $2140-1 は #$BBAA を返す MOV $F5,#$BB - CMP $F4,#$CC ; 5A22 が $2140 に #$CC を書き込むまで待つ BNE - BRA Start Trans MOV Y,$F4 ; *** 転送ルーチン *** BNE Trans ; 最初に、5A22 の $2140 から バイト 0 (準備完了) が書き込まれるのを待つ - CMP Y,$F4 ; ループスタート $2140 から 次のバイト/終了 信号を待つ BNE + MOV A,$F5 ; 次のバイトを取得 ($2140 がバイトインデックスに一致するのを期待する) MOV $F4,Y ; $2141 からバイトを読み込み、$2140 にエコーする MOV [$00]+Y,A ; 準備。バイトを書き込み、カウンタを更新 INC Y BNE - INC $01 ; (handle $xxFF- $xx00 overflow case on increment) + BPL - CMP Y,$F4 ; If "next byte/end" is not equal to expected next byte BPL - ; index, it s "end" drop back into the main loop. Start MOVW YA,$F6 ; *** メインループ *** MOVW $00,YA ; 5A22 の $2142-3 からアドレスを取得 MOVW YA,$F4 ; $2141 からモードを取得, $2140 からエコーバック MOV $F4,A MOV A,Y MOV X,A BNE Trans ; Mode non-0 転送開始 JMP [$0000+X] ; Mode 0 アドレスにジャンプ .DW $FFC0 ; RESET ベクタ アップロードしたデータを正しく処理するために、 次の手続きを実行する。 $2140-1 から 16 ビット読み込み、$BBAA を返すまで待つ ターゲットアドレスを $2142-3 に書き込む $2141 に 0 以外の値を書き込む $2140 に $CC を書き込む $2140 が $CC を返すまで待つ 最初のバイトを $2141 に書き込む $2140 にバイトインデックスを書き込む ($00 が最初のバイト) $2140 がセットしたバイトインデックスを返すまで待つ ステップ 6 に戻り、次のバイトを書き込み、++index を入れて完了まで続ける 他のブロックを書き込みたい時、次のアドレスを $2142-3 に書き込み、 0 以外の値を $2141 にセットし、index+2 を $2140 に入れ、 エコーバックを待つ。 そして、ステップ 6 に index=0 で戻る。 アップロード後にどこかのコードへジャンプしたい時は、 ターゲットアドレスを $2142-3 に書き込み、 $2141 に $00 を、$2140 に index+2 を書き込み、 エコーバックを待つ。 すぐ後に、コードが実行される。 電源ONの後、最初のユーザコードに入る時に次の値がレジスタにセットされる。 A=0, X=0, Y=0, PSW=$02, SP=$EF このアップローダに戻りたい時は、0x00F1 から IPL を有効にして、 P フラグをクリアして、 $FFC0 に単純にジャンプする (もしくはスタックとページ 0 のリセットをスキップして、$FFC9 にジャンプする)。
https://w.atwiki.jp/wadaisenryaku2/pages/33.html
改造コード 部隊コード 陣営コード オプションコード 施設コード 兵器登録コード 地形コード マップエディット 兵器指定値一覧 武器指定値一覧 文字指定値一覧 バイナリ改造 バイナリ編集概要 CD-ROM内の各ファイルの仕様 兵器アイコンの仕様 武器・武装データの仕様 シナリオデータの仕様(予定) 基礎知識 2種類のメモリ セガサターンのメモリには「02メモリ」と「60メモリ」の二種類があり、それぞれ異なったデータが書き込まれている。 現在掲載中のコードは全て60メモリ用なので、CEPを用いる際は(60)と記載されたベースアドレスに合わせること。 またゲーム上にあるはずのデータが60メモリ上で見つからない場合、02メモリ内を探索してみると良いかもしれない。 データ構造 以下はゲーム実行中の60メモリ上のデータ配列を示したものである。 これらの中で適切なアドレスを探し、値を書き換えることによって改造が成立する。 アドレス(16進) 区分 備考 鋼鉄 作戦 セーブデータ 8000~EDFF(共通) - 兵器登録コード 36F90~3A7CF 350D0~3890F 14~3853 部隊コード 3A7D4~3ABD3 38914~38D13 3858~3C57 索敵コード 索敵で見えているマスを記録 3AC1F~3B09E 38D5F~391DE 3CA3~4122 施設コード 3BC58~3BCAF 39D98~39DEF 4CDC~4D33 オプションコード 3BCB0~3BD27 39DF0~39E67 4D34~4DAB 陣営コード 3BD28~3BD87 39E68~39EC7 4DAC~4E0B オプションコード セーブデータには部隊コード~オプションコードまでのデータ配列がそのまま記録される。 このセクションは鋼鉄・作戦でアドレスが異なるものの、一定量ずれているだけであって、データの並び自体は全く同じである。 よって改造にあたっては、CEPやPAR(下記)の他にも、セーブデータをバイナリエディタ上で直接編集するという手段もある。 (特に部隊インデックスの入れ替えはバイナリエディタを使わなければ厳しい) コードの入力方法 エミュレータの場合はCEP、実機の場合はPARを用いる。 筆者がPARについて詳しくないため、これ以降の説明はCEP(PAR互換モード)を前提とする。 なおPARの入力方法についてはこちらのページを参考にした。 CEP(PAR互換モード) PAR 効果(例は鋼鉄の旋風でのアドレスとする) 1バイト(8bit)書き換え 30XXXXXX 00YY 36XXXXXX 00YY アドレスXXXXXXをYYに変える 例 30037418 00FA 36037418 00FA 第1陣営空第1部隊の経験値を250にする 2バイト(16bit)書き換え 80XXXXXX ZZYY 16XXXXXX YYZZ アドレスXXXXXXをYYに、アドレスXXXXXX+1をZZにする※CEPの場合、YYZZではないことに注意。 例 80036F9D 1E14 16036F9D 141E 第1陣営司令部を座標X 20 Y 30に移動させる 繰り返し 5000XXYY 0000 直下一行のコードを、アドレスYY間隔でXX回繰り返す 例 50005024 000030039C9A 00FA 第5陣営の訓練値をすべて250にする(アドレス390CA、39CBE、39CE2、・・・3A7B6までの計80個を250にする) メモリの閲覧 CEPの「検索」タブにてフラグ消去ボタンを押すと、「編集」タブにてメモリ上のデータ配列を閲覧できる。 このデータ配列上でクリックすると、クリックした箇所から8バイト分を直接書き換えることができる。 また、「保存」ボタンで現在のメモリの状態をバイナリファイルで書き出すこともできる(ただしデータ欠損などの失敗も割と起こるので注意)。 値の検索 CEPの「検索」タブにて目的の値を入力して検索すると、その値が格納されているアドレスの一覧が表示される。 なお2バイト(16bit)の値を検索する場合、1バイト目と2バイト目を入れ換えて検索することに注意。 セーブデータの冒頭20(14h)バイトについて 基本的には弄らなくて良いが、作戦ファイルの場合セーブデータのゲーム上での順番が 記録日時(≠ファイル自体の更新日時)順となるため、順番を綺麗に揃えたいなら弄ってみるのもありだ。 (鋼鉄の場合はWORLD_AD_[番号].binの番号順に並ぶためシンプルに済む。・・・と思いきや違うことが判明したので後述) またこれはワールドアドバンスド大戦略に限らず、サターン全般のセーブデータである程度共通する仕様のようだ。 (例)鋼鉄スタンダードのコロネット作戦のセーブデータ 35 33 34 36 30 33 30 31 30 35 00 00 70 9B 50 15 00 00 00 00 35 33 34 36 30 33 30 31 30 35:ASCIIデータで「5346030105」を表す。この5346030105のうち、 53:鋼鉄ではマップ番号(10進)、作戦ファイルではシナリオ番号(16進)となる(例:D3→瀬戸内海ウォーズ)。 この番号を変更するとマップが変わる。ただしマップ番号以外のデータは以前のままのため、 非常にチグハグなデータになる(1回試してみると面白い)。 460301:46/3/1、つまりゲームシナリオ上の日時(ファイルの記録日時ではない) 05:不明。鋼鉄では5の倍数(10進)?作戦ファイルでは常に00(バイナリで3030)になるみたい。 11~12バイト目「0000」および17~20バイト目「00000000」:意味のないクッションデータと思われる 70 9B 50 15:セーブデータの記録日時(2022/10/2 13 46を表す) Windows上の更新日時とは別。サターン本体orSSFの時計を現実時間に合わせていない場合は食い違う。 鋼鉄の場合、セーブデータを作成した時のみ記録され、以降はいくらデータを上書きしても更新されない(違うマップを上書きした場合でもである)。 なので普通に取り扱った場合、ゲーム上ではWORLD_AD_[番号].binの番号順に並ぶことになるが、あくまで実際はここの値の順である。 作戦ファイルの場合はセーブ上書きの都度更新されるので、ゲーム上での順番が入れ替わる。 00000000の時:1980/0/0 0 00 ここからスタート。 1バイト目(70):下一桁が0か8しか記録されない(X0 or X8)。+8hで+1分、+10hで+2分。F8→31分。 秒は記録されないが、もしされるとしたら+1hで+7.5秒か。 2バイト目(9B):+1hで+32分。+2hで1時間00分?(未検証) +10hで+8時間。 3バイト目(50):+1hで+4日。+8hで+1ヶ月(日の端数切捨)。+10hで+2ヶ月。 4バイト目(15):+1hで+2年(月の端数切捨)。2022現在は15h=21(1980年+2×21=2022年)。 余談だがFFなら2492年なので、他のバイトと合わせると2493年末まで記録可能ということになる。
https://w.atwiki.jp/wadaisenryaku/pages/676.html
改造コード 部隊コード 陣営コード オプションコード 施設コード 兵器登録コード 地形コード マップエディット 兵器指定値一覧 武器指定値一覧 文字指定値一覧 バイナリ改造 バイナリ編集概要 CD-ROM内の各ファイルの仕様 兵器アイコンの仕様 武器・武装データの仕様 シナリオデータの仕様(予定) 基礎知識 2種類のメモリ セガサターンのメモリには「02メモリ」と「60メモリ」の二種類があり、それぞれ異なったデータが書き込まれている。 現在掲載中のコードは全て60メモリ用なので、CEPを用いる際は(60)と記載されたベースアドレスに合わせること。 またゲーム上にあるはずのデータが60メモリ上で見つからない場合、02メモリ内を探索してみると良いかもしれない。 データ構造 以下はゲーム実行中の60メモリ上のデータ配列を示したものである。 これらの中で適切なアドレスを探し、値を書き換えることによって改造が成立する。 アドレス(16進) 区分 備考 鋼鉄 作戦 セーブデータ 8000~EDFF(共通) - 兵器登録コード 36F90~3A7CF 350D0~3890F 14~3853 部隊コード 3A7D4~3ABD3 38914~38D13 3858~3C57 索敵コード 索敵で見えているマスを記録 3AC1F~3B09E 38D5F~391DE 3CA3~4122 施設コード 3BC58~3BCAF 39D98~39DEF 4CDC~4D33 オプションコード 3BCB0~3BD27 39DF0~39E67 4D34~4DAB 陣営コード 3BD28~3BD87 39E68~39EC7 4DAC~4E0B オプションコード セーブデータには部隊コード~オプションコードまでのデータ配列がそのまま記録される。 このセクションは鋼鉄・作戦でアドレスが異なるものの、一定量ずれているだけであって、データの並び自体は全く同じである。 よって改造にあたっては、CEPやPAR(下記)の他にも、セーブデータをバイナリエディタ上で直接編集するという手段もある。 (特に部隊インデックスの入れ替えはバイナリエディタを使わなければ厳しい) コードの入力方法 エミュレータの場合はCEP、実機の場合はPARを用いる。 筆者がPARについて詳しくないため、これ以降の説明はCEP(PAR互換モード)を前提とする。 なおPARの入力方法についてはこちらのページを参考にした。 CEP(PAR互換モード) PAR 効果(例は鋼鉄の旋風でのアドレスとする) 1バイト(8bit)書き換え 30XXXXXX 00YY 36XXXXXX 00YY アドレスXXXXXXをYYに変える 例 30037418 00FA 36037418 00FA 第1陣営空第1部隊の経験値を250にする 2バイト(16bit)書き換え 80XXXXXX ZZYY 16XXXXXX YYZZ アドレスXXXXXXをYYに、アドレスXXXXXX+1をZZにする※CEPの場合、YYZZではないことに注意。 例 80036F9D 1E14 16036F9D 141E 第1陣営司令部を座標X 20 Y 30に移動させる 繰り返し 5000XXYY 0000 直下一行のコードを、アドレスYY間隔でXX回繰り返す 例 50005024 000030039C9A 00FA 第5陣営の訓練値をすべて250にする(アドレス390CA、39CBE、39CE2、・・・3A7B6までの計80個を250にする) メモリの閲覧 CEPの「検索」タブにてフラグ消去ボタンを押すと、「編集」タブにてメモリ上のデータ配列を閲覧できる。 このデータ配列上でクリックすると、クリックした箇所から8バイト分を直接書き換えることができる。 また、「保存」ボタンで現在のメモリの状態をバイナリファイルで書き出すこともできる(ただしデータ欠損などの失敗も割と起こるので注意)。 値の検索 CEPの「検索」タブにて目的の値を入力して検索すると、その値が格納されているアドレスの一覧が表示される。 なお2バイト(16bit)の値を検索する場合、1バイト目と2バイト目を入れ換えて検索することに注意。 セーブデータの冒頭20(14h)バイトについて 基本的には弄らなくて良いが、作戦ファイルの場合セーブデータのゲーム上での順番が 記録日時(≠ファイル自体の更新日時)順となるため、順番を綺麗に揃えたいなら弄ってみるのもありだ。 (鋼鉄の場合はWORLD_AD_[番号].binの番号順に並ぶためシンプルに済む。・・・と思いきや違うことが判明したので後述) またこれはワールドアドバンスド大戦略に限らず、サターン全般のセーブデータである程度共通する仕様のようだ。 (例)鋼鉄スタンダードのコロネット作戦のセーブデータ 35 33 34 36 30 33 30 31 30 35 00 00 70 9B 50 15 00 00 00 00 35 33 34 36 30 33 30 31 30 35:ASCIIデータで「5346030105」を表す。この5346030105のうち、 53:鋼鉄ではマップ番号(10進)、作戦ファイルではシナリオ番号(16進)となる(例:D3→瀬戸内海ウォーズ)。 この番号を変更するとマップが変わる。ただしマップ番号以外のデータは以前のままのため、 非常にチグハグなデータになる(1回試してみると面白い)。 460301:46/3/1、つまりゲームシナリオ上の日時(ファイルの記録日時ではない) 05:不明。鋼鉄では5の倍数(10進)?作戦ファイルでは常に00(バイナリで3030)になるみたい。 11~12バイト目「0000」および17~20バイト目「00000000」:意味のないクッションデータと思われる 70 9B 50 15:セーブデータの記録日時(2022/10/2 13 46を表す) Windows上の更新日時とは別。サターン本体orSSFの時計を現実時間に合わせていない場合は食い違う。 鋼鉄の場合、セーブデータを作成した時のみ記録され、以降はいくらデータを上書きしても更新されない(違うマップを上書きした場合でもである)。 なので普通に取り扱った場合、ゲーム上ではWORLD_AD_[番号].binの番号順に並ぶことになるが、あくまで実際はここの値の順である。 作戦ファイルの場合はセーブ上書きの都度更新されるので、ゲーム上での順番が入れ替わる。 00000000の時:1980/0/0 0 00 ここからスタート。 1バイト目(70):下一桁が0か8しか記録されない(X0 or X8)。+8hで+1分、+10hで+2分。F8→31分。 秒は記録されないが、もしされるとしたら+1hで+7.5秒か。 2バイト目(9B):+1hで+32分。+2hで1時間00分?(未検証) +10hで+8時間。 3バイト目(50):+1hで+4日。+8hで+1ヶ月(日の端数切捨)。+10hで+2ヶ月。 4バイト目(15):+1hで+2年(月の端数切捨)。2022現在は15h=21(1980年+2×21=2022年)。 余談だがFFなら2492年なので、他のバイトと合わせると2493年末まで記録可能ということになる。
https://w.atwiki.jp/snesspec/pages/206.html
JMP コード一覧 文法 オペコード バイト数 命令サイクル フラグ変化 内容 JMP !abs 5F 3 3 -------- PC - abs allows to jump anywhere in the memory space JMP [!abs+X] 1F 3 6 -------- PC - abs (abs+X)
https://w.atwiki.jp/snesspec/pages/80.html
BRA (Branch Always) [常に分岐] BRA は、ステータスフラグの内容に関係なく、 符号付きバイト分だけジャンプする。 分岐先のアドレスは、-128 ~ 127 の範囲で指定する。 BRA と BRL 命令は、 再配置可能なコードを書くことを容易にするために使われる。 フラグ変化 なし コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル 注 Program Counter Relative BRA near 80 2 3 1 1 6502 エミュレーションモード (e=1) の時、 1 サイクル追加 ? TODO マニュアルの内容がおかしい (65816 Programming Primer)
https://w.atwiki.jp/snesspec/pages/272.html
0x0C - MVOLL (左チャネルマスターボリューム) D7 D6 D5 D4 D3 D2 D1 D0 符号 各チャンネルのメイン・ボリューム(エコー・ボリューム)は エコー・ボリューム(メイン・ボリューム)と加算され出力されます。 0x1C - MVOLR (右チャネルマスターボリューム) D7 D6 D5 D4 D3 D2 D1 D0 符号 各チャンネルのメイン・ボリューム(エコー・ボリューム)は エコー・ボリューム(メイン・ボリューム)と加算され出力されます。 0x2C - EVOLL (左チャネルエコーボリューム) D7 D6 D5 D4 D3 D2 D1 D0 符号 各チャンネルのメイン・ボリューム(エコー・ボリューム)は エコー・ボリューム(メイン・ボリューム)と加算され出力されます。 0x3C - EVOLR (右チャネルエコーボリューム) D7 D6 D5 D4 D3 D2 D1 D0 符号 各チャンネルのメイン・ボリューム(エコー・ボリューム)は エコー・ボリューム(メイン・ボリューム)と加算され出力されます。 0x4C - KON (全ての音声のキーオン) D7 D6 D5 D4 D3 D2 D1 D0 Voice7 Voice6 Voice5 Voice4 Voice3 Voice2 Voice1 Voice0 key on 及び key off。D0 ~ D7が各々 Voice0 ~ 7 に対応します。1の時 key on 又は key off を行い、0の時は何もしません。 この二つのレジスタは、リセットの必要はありません。 KOFでは、1が書かれた Voiceについて、ADSRモード/GAINモードにかかわらず 一定値 (-1 / 256) 加算により 1 → 0 が 8 msec の割合で減衰します。 また、KON, KOFの連続書き込みは、2Ts (62.5usec) 以上離して下さい。 0x5C - KOFF (全ての音声のキーオフ) D7 D6 D5 D4 D3 D2 D1 D0 Voice7 Voice6 Voice5 Voice4 Voice3 Voice2 Voice1 Voice0 key on 及び key off。D0 ~ D7が各々 Voice0 ~ 7 に対応します。1の時 key on 又は key off を行い、0の時は何もしません。 この二つのレジスタは、リセットの必要はありません。 KOFでは、1が書かれた Voiceについて、ADSRモード/GAINモードにかかわらず 一定値 (-1 / 256) 加算により 1 → 0 が 8 msec の割合で減衰します。 また、KON, KOFの連続書き込みは、2Ts (62.5usec) 以上離して下さい。 0x6C - FLG (リセット・ミュート・エコー書き込みフラグとノイズクロック) D7 D6 D5 D4 D3 D2 D1 D0 RES MUTE ECEN NCK RES D7=1のときソフトリセットがかかります。このとき、全 Voice が key on 待ち状態になりミュートがかかります。 パワーオン時に1となります。 MUTE D6=1 のとき全 Voice にミュートがかかります。 パワーオン時に1となります。 ECEN D5=0 のとき、Echo による外部メモリへの書込みが可能になります。 (Echo Enable)パワーオン後、CPUが最初に書込みを行うまでは 読み出しデータは不定です。 NCK ノイズ発生器のクロックを指定します。 0x7C - ENDX (音声とフラグ) D7 D6 D5 D4 D3 D2 D1 D0 Voice7 Voice6 Voice5 Voice4 Voice3 Voice2 Voice1 Voice0 Source の End Flag の立つブロックの BRR デコードを終えたら、 DSP 側が1を立てます。D0~7 が Voice 0~7 に対応しています。 key on されたVoice があると、それに対応する bit はリセットされます。 また、CPU側がこのレジスタを書き込むと、全 bit がリセットされます。 0x0D - EFB (エコーフィードバックボリューム) D7 D6 D5 D4 D3 D2 D1 D0 符号 符号付 8bit. 0x2D - PMON (ピッチモジュレーション有効) D7 D6 D5 D4 D3 D2 D1 D0 Voice7 Voice6 Voice5 Voice4 Voice3 Voice2 Voice1 Voice0 Voice (i-1) (i=1~7) の OUTX を変調波として、Voice i にピッチ変調をかけます。 Di=1 のとき変調 ON となります。(例:D1=1のとき、Voice1から変調音が出ます。) ただし、Voice0には変調はかかりません。そのため、D0ビットは無効となります。 ピッチ変調の方法は、変調波の波高値をYo、P(H),P(L)の値をPとすると、 P =P(1+Yo)となる値P’が、Pに代わってその時のピッチの値として 採用されるというものです。 0x3D - NON (ノイズ有効) D7 D6 D5 D4 D3 D2 D1 D0 Voice7 Voice6 Voice5 Voice4 Voice3 Voice2 Voice1 Voice0 ノイズの on/off。1でON。D0~7がVoice0~7に対応しています。on の時、 音源データの変わりにノイズがでます。 この時、前頁 SRCN でフォルマントのみの音源データを指定していると、 ノイズは音源データの長さ分の時間しか発音しません。 任意の時間再生したい時は必ず SRCN で、ループを含む音源データを指定してください。 また、二つ以上の Voice が on であっても Noise の音源は同一です。 このノイズに変調はかけられません。 0x4D - EON (エコー有効) ] [#fc8b2de2] D7 D6 D5 D4 D3 D2 D1 D0 Voice7 Voice6 Voice5 Voice4 Voice3 Voice2 Voice1 Voice0 Echo の on/off。1で on。D0~7 が Voice0~7 に対応しています。 0x5D - DIR (サンプルテーブルアドレス) Source ディレクトリのオフセットアドレスを与えます。 [DIR]x100H がディレクトリの先頭アドレスとなります。 0x6D - ESA (エコー用リングバッファアドレス) Echo Start Address。 Echo 領域のオフセットアドレスを与えます。 [ESA]x100H がEcho 領域の先頭アドレスとなります。 0x7D - EDL (エコーディレイ(リングバッファサイズ)) D7 D6 D5 D4 D3 D2 D1 D0 -------- Echo Dclay。下位 4bit のみが有効です。ディレイ時間は 16msec 間隔で、 0~240msec の範囲で可変します。 この時間を t とすると、必要な外部メモリ領域は(2t)kbyte となります。 (最大 30k byte)ただし、EDL=0のときは、 ESA~ESA+3 の4バイトのメモリ領域が必要となります。 0xXF - FIRx (エコーFIRフィルター係数x) D7 D6 D5 D4 D3 D2 D1 D0 符号 Echo フィルタの係数を与えます。sign付8bit。8タップの FIRフィルタを構成します。 Lch,Rchとも同一フィルタとなります。